package entidades;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Vuelo {

	private String nroVuelo;
	private Aeropuerto origen;
	private Aeropuerto Destino;
	private Double precio;
	private Date salida;
	private Date llegada;
	private int cantDisponible;
	private Estado estado;
	private List<Reserva> reservas;

	public String MSG_VALIDATE_ORIGEN = "No puede ser vacio ni igual al de destino";
	public String MSG_VALIDATE_DESTINO = "No puede ser vacio ni igual al de origen";
	public String MSG_VALIDATE_CANT_DISPONIBLE = "Debe ser mayor que 1 y menor que 400";
	public String MSG_VALIDATE_PRECIO = "Debe ser mayor a 0 y menor que 10000";

	public Vuelo() {
		this.reservas = new ArrayList<Reserva>();
		this.setEstado(Estado.Anunciado);
	}

	public List<Reserva> getReservas() {
		return this.reservas;
	}

	public boolean hasReservas() {
		return (this.getReservas().size() > 0);
	}

	public Estado getEstado() {
		return this.estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public String getNroVuelo() {
		return this.nroVuelo;
	}

	public void setNroVuelo(String nroVuelo) {
		this.nroVuelo = nroVuelo;
	}

	public Aeropuerto getOrigen() {
		return this.origen;
	}

	public void setOrigen(Aeropuerto origen) {
		this.origen = origen;
	}

	public Aeropuerto getDestino() {
		return this.Destino;
	}

	public void setDestino(Aeropuerto destino) {
		this.Destino = destino;
	}

	public Double getPrecio() {
		return this.precio;
	}

	public void setPrecio(Double precio) {
		this.precio = precio;
	}

	public Date getSalida() {
		return this.salida;
	}

	public void setSalida(Date salida) {
		this.salida = salida;
	}

	public Date getLlegada() {
		return this.llegada;
	}

	public void setLlegada(Date llegada) {
		this.llegada = llegada;
	}

	public int getCantDisponible() {
		return this.cantDisponible;
	}

	public void setCantDisponible(int cantDisponible) {
		this.cantDisponible = cantDisponible;
	}

	public boolean validateDestino() {
		if (this.getDestino() == null || this.getDestino().equals(this.getOrigen())) {
			return false;
		}
		return true;
	}

	public boolean validateOrigen() {
		if (this.getOrigen() == null || this.getOrigen().equals(this.getDestino())) {
			return false;
		}
		return true;
	}

	public boolean validateCantDisponible() {
		if (this.getCantDisponible() < 1 || this.getCantDisponible() > 400) {
			return false;
		}
		return true;
	}

	public boolean validatePrecio() {
		if (this.getPrecio() < 0 || this.getPrecio() > 10000) {
			return false;
		}
		return true;
	}

	
	public boolean validateCambio(Estado actual,Estado nuevo){
		switch(actual){
			case Anunciado:
				switch (nuevo) {
					case EnVueloDespegando:
					case EnVuelo:
					case EnVueloArribando:
					case Aterrizando:
					case Descendiendo:
						return false;
					default:
				}
				break;
			case Canceladoyfinalizado:
				return false;
			case Demorado:
				switch (nuevo) {
					case Embarcando:
					case EnVuelo:
					case EnVueloArribando:
					case EnVueloDespegando:
					case Aterrizando:
					case Descendiendo:
						return false;
					default:
				}
				break;
			case Embarcando:
				if(nuevo != Estado.EnVueloDespegando)
					return false;
				break;
			case EnVueloDespegando:
				if(nuevo != Estado.EnVuelo)
					return false;
				break;
			case EnVuelo:
				if(nuevo != Estado.EnVueloArribando)
					return false;
				break;
			case EnVueloArribando:
				if(nuevo != Estado.Aterrizando)
					return false;
				break;
			case Aterrizando:
				if(nuevo != Estado.Descendiendo)
					return false;
				break;
			case Descendiendo:
				return false;
			
		}
		return true;
	
	}	
}
